// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

// 云函数入口函数
exports.main = async (event, context) => {
  const db = cloud.database()
  const orders = db.collection('orders')

  try {
    const { resultCode, outTradeNo, transactionId, totalFee } = event

    console.log('支付回调数据：', event)

    if (resultCode === 'SUCCESS') {
      // 支付成功，更新订单状态
      const orderRes = await orders.where({
        order_no: outTradeNo
      }).get()

      if (orderRes.data.length > 0) {
        const order = orderRes.data[0]
        
        // 更新订单状态
        await orders.doc(order._id).update({
          data: {
            payment_status: 'paid',
            transaction_id: transactionId,
            paid_at: new Date(),
            updated_at: new Date()
          }
        })

        // 发送支付成功通知
        await sendPaymentNotification(order)

        console.log('订单支付成功：', outTradeNo)
      }
    } else {
      // 支付失败，更新订单状态
      const orderRes = await orders.where({
        order_no: outTradeNo
      }).get()

      if (orderRes.data.length > 0) {
        await orders.doc(orderRes.data[0]._id).update({
          data: {
            payment_status: 'failed',
            updated_at: new Date()
          }
        })
      }

      console.log('订单支付失败：', outTradeNo)
    }

    return {
      errCode: 0,
      errMsg: 'success'
    }
  } catch (error) {
    console.error('支付回调处理失败：', error)
    return {
      errCode: -1,
      errMsg: '处理失败'
    }
  }
}

// 发送支付成功通知
async function sendPaymentNotification(order) {
  try {
    // 发送模板消息通知用户
    await cloud.openapi.subscribeMessage.send({
      touser: order._openid,
      templateId: 'your_template_id', // 需要替换为实际的模板ID
      page: `pages/order-detail/order-detail?id=${order._id}`,
      data: {
        thing1: { value: order.order_no }, // 订单号
        amount2: { value: `¥${order.amount}` }, // 支付金额
        time3: { value: new Date().toLocaleString() }, // 支付时间
        thing4: { value: '支付成功' } // 支付状态
      }
    })
  } catch (error) {
    console.error('发送通知失败：', error)
  }
} 